package nan.LinkedList;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class Main3 {
    public static void main(String[] args) {
        List<String> list=new ArrayList<>();//顺序表
        List<String> linkedList=new LinkedList<>();//链表
        //都是继承List这个接口
        //1.插入元素
        linkedList.add("hello");//直接add是进行尾插，如果是单链表，
        // 此时要想尾插就比较麻烦，需要先找到尾结点。
        //实际上标准库中的链表采用的是双向带环链表（首尾相接）
        //对于标准库的LinkedList的尾插操作是O（1）
        linkedList.add(10,"nnn");//中间位置插入，使用add参数来指定插入的位置
        //在中间位置插入的时候，还是需要找到位置
        //对于标准库的LinkedList的插入是O(N)


        //2.删除元素,无论是按值删除还是按位置删除，都需要遍历链表找到要删除的节点，然后再进行删除操作
        linkedList.remove(10);//按位置删除
        //对于标准库的LinkedList的删除是O(N)

        //3.查找元素，都要进行链表遍历
        linkedList.indexOf("nnn");//根据值找下标
        linkedList.get(10);//根据下标找值
        //查找操作时间复杂度O(N)

        //4.修改元素
        linkedList.set(10,"zzz");
        //时间复杂度O(N)

    }
}
